package com.czollmann.android.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.joda.time.DateTime;

import com.czollmann.android.DateObjectWrapper;
import com.czollmann.android.ObjectWrapper;
import com.czollmann.android.SMSObject;

public class DateObjectWrapperUtils {
	public static List<DateObjectWrapper> dateObjectWrappers = new ArrayList<DateObjectWrapper>();

	public static List<DateObjectWrapper> getDateObjectWrappers() {
		return dateObjectWrappers;
	}

	public static void clear() {
		dateObjectWrappers = new ArrayList<DateObjectWrapper>();
	}

	public static void setDateObjectWrappers(
			List<DateObjectWrapper> dateObjectWrappers) {
		DateObjectWrapperUtils.dateObjectWrappers = dateObjectWrappers;
	}

	public static void addObjectWrappersToDateObjectWrappers(
			List<ObjectWrapper> objectWrappers) {
		for (ObjectWrapper objectWrapper : objectWrappers) {
			DateObjectWrapper dateObjectWrapper = findDateObjectWrapperByDate(objectWrapper
					.getDate());
			dateObjectWrapper.getObjects().add(objectWrapper);
		}
	}

	private static DateObjectWrapper findDateObjectWrapperByDate(DateTime date) {
		DateObjectWrapper returnDateObjectWrapper = null;
		for (DateObjectWrapper dateObjectWrapper : dateObjectWrappers) {
			if (dateObjectWrapper.getDateTime().withMillisOfDay(0).isEqual(
					date.withMillisOfDay(0))) {
				returnDateObjectWrapper = dateObjectWrapper;
				break;
			}
		}
		if (returnDateObjectWrapper == null) {
			returnDateObjectWrapper = new DateObjectWrapper(date);
			dateObjectWrappers.add(returnDateObjectWrapper);
		}
		return returnDateObjectWrapper;
	}

	public static int getMaxObjectWrapperCount() {
		DateObjectWrapper maxDateObjectWrapper = null;
		for (DateObjectWrapper dateObjectWrapper : dateObjectWrappers) {
			if (maxDateObjectWrapper == null
					|| (maxDateObjectWrapper.getObjects().size() < dateObjectWrapper
							.getObjects().size())) {
				maxDateObjectWrapper = dateObjectWrapper;
			}
		}
		if (maxDateObjectWrapper != null) {
			return maxDateObjectWrapper.getObjects().size();
		}
		return 0;
	}

	public static void createTestData() {
		if (dateObjectWrappers.size() == 0) {
			Random generator = new Random();
			int r1 = generator.nextInt(10) + 10;
			for (int i = 0; i < r1; i++) {
				DateTime date = new DateTime().withDayOfYear(generator
						.nextInt(356) + 1);
				DateObjectWrapper dateObjectWrapper = new DateObjectWrapper(
						date);

				int r2 = generator.nextInt(10) + 1;
				for (int j = 0; j < r2; j++) {
					DateTime dateTime = date.withMillisOfDay(generator
							.nextInt(86400000) + 1);
					SMSObject smsObject = new SMSObject("Testnachricht");
					smsObject.setNumber("01778330527");
					smsObject.setType(2);
					ObjectWrapper objectWrapper = new ObjectWrapper(dateTime,
							smsObject);
					dateObjectWrapper.getObjects().add(objectWrapper);
				}
				dateObjectWrappers.add(dateObjectWrapper);
			}
		}
	}
}
